/*
 * relation.c
 *
 * Sisältää relaation tietorakenteen sekä funktiot relaation luontii, 
 * poistoon, vertailuun sekä muuntoon int-arvoksi ja takaisin.
 *
 */

#include <stdlib.h>
#include <stdbool.h>
#include "dynarray.h"
#include "person.h"
#include "relation.h"


/*
 *	Luo uuden relaation
 */
relation* rel_new(person* person1, person* person2, rel_t type) { //Joni
    relation* tmp = malloc(sizeof (relation));
    if (tmp == NULL) {
        return NULL;
    }
    tmp->person1 = person1;
    tmp->person2 = person2;
    tmp->type = type;
    return tmp;
}

/*
 *	Vapauttaa relaation
 */
void rel_free(relation* rel) { //Ossi
    free(rel);
}

/*
 *	Vertailee kahta relaatiota
 */
bool rel_equals(void* relation1, void* relation2) { //Joni
    relation* r1 = (relation*) relation1, *r2 = (relation*) relation2;
    if (r1->type != r2->type) return false;
    if (per_compare(r1->person1, r2->person1) != 0) return false;
    if (per_compare(r1->person2, r2->person2) != 0) return false;
    return true;
    
}

/*
 *	Muuttaa int-arvon relation typeksi
 */
rel_t int_to_relt(const int i) { //Ossi
    switch (i) {
        case 0: return REL_CHILD;
        case 1: return REL_MARRIAGE;
        case 2: return REL_OTHER;
    }
    return REL_INVALID_VALUE;
}

/*
 *	Muuttaa relation type:n int-arvoksi
 */
int relt_to_int(const rel_t i) { //Ossi
    switch (i) {
        case REL_CHILD: return 0;
        case REL_MARRIAGE: return 1;
        case REL_OTHER: return 2;
        default: return -1;
    }
}
